package com.weixiaodong.javabasic.冗余的ifelse的代替方式.工厂方式;

import com.weixiaodong.javabasic.冗余的ifelse的代替方式.枚举方式.PermissionEnum;
import com.weixiaodong.javabasic.冗余的ifelse的代替方式.枚举方式.RoleEnum;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

/**
 * 定义角色工厂，在这里聚合不同角色对应的不同权限，实际上就是使用一个map存放role和permission之间的映射关系
 */
@SuppressWarnings("all")
public class RoleFactory {
    private static final HashMap<RoleEnum, List<PermissionEnum>> role2Permission = new HashMap<>(); // 饿汉式单例

    // 初始化映射map, 随着类加载的时候被加载一次，之后就不会在加载了
    static {
        role2Permission.put(RoleEnum.ROLE_ROOT_ADMIN, new ArrayList<>(Arrays.asList(PermissionEnum.AAA_PERMISSION,
                PermissionEnum.BBB_PERMISSION, PermissionEnum.CCC_PERMISSION)));

        role2Permission.put(RoleEnum.ROLE_ORDER_ADMIN, new ArrayList<>(Arrays.asList(PermissionEnum.BBB_PERMISSION,
                PermissionEnum.CCC_PERMISSION)));

        role2Permission.put(RoleEnum.ROLE_NORMAL, new ArrayList<>(Arrays.asList(PermissionEnum.CCC_PERMISSION)));
    }

    // 对外暴露给客户端的接口，上面定义的map是私有的，即不对外暴露这个映射关系，我们提供一个公共静态接口，获取不同角色对应的权限
    public static String getPermission(RoleEnum roleEnum) {
        String result = roleEnum.toString() + ": ";
        if (role2Permission.containsKey(roleEnum)) {
            List<PermissionEnum> permissionEnums = role2Permission.get(roleEnum);
            for (PermissionEnum permissionEnum : permissionEnums) {
                result += permissionEnum.toString() + ";";
            }
        }
        return result;
    }
}
